package cn.base.day12;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class MyJframe extends JFrame {
    public static void main(String[] args) {
        new MyJframe();
    }

    public MyJframe() throws HeadlessException {
        init();//初始化基础布局

        this.setVisible(true);
    }

    public void init() {
        //设置窗体。
        this.setTitle("随机点名器");
        this.setSize(600, 400);
        this.setLocationRelativeTo(null);//软件居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击叉号结束程序
        this.setResizable(false);//取消窗口拖拽大小的功能
        //Borderlayout 边框布局
        this.setLayout(new BorderLayout());

        JPanel panelCenter = new JPanel();//中间的面板
        panelCenter.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));//设置流式布局
        //添加所有的名字 每个名字都是一个按钮
        for (int i = 0; i < 20; i++) {
            JButton btn = new JButton("你好" + i);
            btn.setPreferredSize(new Dimension(100, 40));
            btn.setBackground(Color.PINK);
            btn.setForeground(Color.BLACK);
            btn.setFont(new Font("微软雅黑", Font.BOLD, 20));
            panelCenter.add(btn);
        }

        JPanel panelSouth = new JPanel();//南面的面板4
        JButton btnStart = new JButton("开始");


        //开始按钮的点击事件的监听
        btnStart.addActionListener(new ActionListener() {
            //定义一个布尔变量表示点名功能是否运行 true为运行, false为停止
            boolean isRun = false;
            Random r = new Random();

            //定义一个组件Component变量 用来存放每次随机的按钮
            Component lastBtn = null;

            @Override
            public void actionPerformed(ActionEvent e) {
                //把isRun置为相反的值  运行变停止或者 停止变运行
                isRun = !isRun;
                if (isRun) {
                    //开启点名器
                    //放到子线程
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            while (isRun) {
                                //把上一次随机的按钮 颜色恢复
                                //lastBtn不为空 说明保存了上一次随机的按钮
                                if (lastBtn != null) {
                                    lastBtn.setBackground(Color.PINK);
                                    lastBtn.setForeground(Color.BLACK);
                                }

                                //1 获取到面板里所有的名字按钮
                                Component[] components = panelCenter.getComponents();
                                //2 获取随机索引
                                int index = r.nextInt(components.length);
                                //获取一个随机的按钮
                                Component rBtn = components[index];
                                lastBtn = rBtn;

                                rBtn.setBackground(Color.CYAN);
                                rBtn.setForeground(Color.RED);
                                //每次随机后 停顿0.1秒  sleep的单位是毫秒
                                try {
                                    Thread.sleep(100);
                                } catch (InterruptedException ex) {
                                    throw new RuntimeException(ex);
                                }
                            }
                        }
                    }).start();


                    //把按钮改成文字停止
                    btnStart.setText("停止");
                } else {
                    //停止点名器
                    //把按钮改成文字开始
                    btnStart.setText("开始");
                }
            }
        });

        panelSouth.add(btnStart);


        this.add(panelCenter, BorderLayout.CENTER);
        this.add(panelSouth, BorderLayout.SOUTH);
    }
}
